#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <ctype.h>
#define LEN 1024
#define MUM 32
int main()
{
  char cmd[LEN];
  char* myargv[MUM];
  while(1)
  {
    printf("[zxy@VM-24-17-centos lesson15]#");
    fgets(cmd,LEN,stdin);
    cmd[strlen(cmd)-1]='\0';//最后一个是换行符，改成'\0'
   
    //判断有没有重定向
    char* start=cmd;
    while(*start!='\0')
    {
      if(*start=='>')
      {
        *start='\0';
        start++;
        break;
      }
      start++;
    }
    if(*start=='\0')
    {
      start=NULL;
    }
    else 
    {
        while(isspace(*start))
        {
          start++;
        }
    }

    //strtok分割字符串，返回字符串首字母地址
    int i=1;
    myargv[0]=strtok(cmd," ");
    while(myargv[i]=strtok(NULL," "))
    {
      i++;
    }
   //创建子进程
    pid_t id=fork();
    if(id==0)
    {
      //child
      
      //判断是否有重定向，如果有重定向的话，则打开文件
      if(start!=NULL)
      {
        int fd=open(start,O_WRONLY|O_CREAT,0644);
        if(fd<0)
        {
          perror("open fail");
        }
        dup2(fd,1);
      }
      //进行进程替换
      execvp(myargv[0],myargv);
      exit(11);
    }
    else 
    {
      //father
      int status=0; 
      pid_t ret=waitpid(id,&status,0);
      if(ret>0)
      {
        printf("%d\n",WEXITSTATUS(status));
      }
      
    }
  }
  return 0;
}

